package com.Apo1o.Interceptor;

import com.Apo1o.utils.JwtUtils;
import com.Apo1o.vo.TokenVo;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Objects;

/**
 * @author by Apo1o
 * @implNote 2023/10/22 10:55
 */
// 患者的拦截器(管理员和患者)
@Component
public class PatientInterceptor implements HandlerInterceptor {

    /**
     * 在访问接口之前执行的方法，用于验证用户登录状态。
     * 只需在此处编写验证登录状态的业务逻辑，即可在用户调用指定接口之前验证登录状态。
     *
     * @param request  HttpServletRequest对象，用于获取请求信息。
     * @param response HttpServletResponse对象，用于响应请求。
     * @param handler  将要执行的处理器对象。
     * @return boolean 返回值为true表示用户登录状态验证通过，继续执行后续操作；返回值为false表示验证不通过，拦截请求。
     * @throws Exception 抛出异常的情况。
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 判断用户的token信息是否满足
        TokenVo tokenVo = JwtUtils.getUserInfoByToken(request);
        if (tokenVo != null && (Objects.equals(tokenVo.getRoleId(), 3) || Objects.equals(tokenVo.getRoleId(), 1))) {
            return true; // 用户登录状态验证通过
        }
        // 当前不满足条件，直接跳转拦截
        response.getWriter().print("Access denied"); // 输出访问被拒绝信息
        return false; // 阻止继续执行
    }

}
